<script>
  import config from './config'
  import store from '@/store'
  import { getToken } from '@/utils/auth'
  import websocketUtil from '@/utils/websocket.js'
  import notificationUtil from '@/utils/notification.js'
  import PermissionManager from '@/utils/permissionManager.js'

  export default {
    onLaunch: function() {
      console.log('App启动');
      this.initApp()
      // 应用启动时就初始化WebSocket连接
      this.initWebSocket()
      // 监听通知点击事件
      // this.initNotificationClickListener()
      // 应用启动时请求存储权限
      this.requestStoragePermission()
      // 应用回到前台时请求所有文件访问权限
    },
    onHide: function() {
      // 应用进入后台时保持WebSocket连接
      console.log('App 进入后台，保持WebSocket连接')
    },
    onShow: function() {
      // 应用回到前台，检查WebSocket连接
      console.log('App 回到前台')
      // 检查连接状态而不是直接初始化
      websocketUtil.checkConnection()
      // 应用回到前台时检查并请求所有文件访问权限
      this.requestManageExternalStoragePermission()
    },
    methods: {
      // 初始化应用
      initApp() {
        console.log('初始化应用');
        // 初始化应用配置
        this.initConfig()
        // 检查用户登录状态
        //#ifdef H5
        this.checkLogin()
        //#endif
      },
      initConfig() {
        console.log('初始化配置');
        this.globalData.config = config
      },
      checkLogin() {
        console.log('检查登录状态');
        if (!getToken()) {
          console.log('未登录，跳转到登录页');
          this.$tab.reLaunch('/pages/login') 
        }
      },
      // 初始化WebSocket连接
      initWebSocket() {
        console.log('开始初始化WebSocket连接');
        // 添加延迟确保应用完全启动后再连接WebSocket
        const wsUrl = config.websocketUrl;
        console.log('WebSocket URL:', wsUrl);
        websocketUtil.init(wsUrl);
      },
      // 请求存储权限
      requestStoragePermission() {
        // #ifdef APP-PLUS
        console.log('检查存储权限状态');
        if (!PermissionManager.hasStoragePermission()) {
          console.log('需要请求存储权限');
          PermissionManager.requestStoragePermission((granted) => {
            if (granted) {
              console.log('存储权限获取成功');
              uni.showToast({
                title: '存储权限已获取',
                icon: 'success'
              });
            } else {
              console.log('存储权限获取失败');
              uni.showToast({
                title: '存储权限获取失败',
                icon: 'none'
              });
            }
          });
        } else {
          console.log('已拥有存储权限');
        }
        // #endif
      },
      // 请求所有文件访问权限
      requestManageExternalStoragePermission() {
        // #ifdef APP-PLUS
        console.log('检查所有文件访问权限状态');
        // 延迟检查权限，确保应用完全回到前台
        setTimeout(() => {
          if (!PermissionManager.hasManageExternalStoragePermission()) {
            console.log('需要请求所有文件访问权限');
            PermissionManager.requestManageExternalStoragePermission((granted) => {
              if (granted) {
                console.log('所有文件访问权限获取成功');
                uni.showToast({
                  title: '所有文件访问权限已获取',
                  icon: 'success'
                });
              } else {
                console.log('所有文件访问权限获取失败或未授予');
                // 权限获取失败时也显示提示，但使用不同的图标
                uni.showToast({
                  title: '文件访问权限受限',
                  icon: 'none'
                });
              }
            });
          } else {
            console.log('已拥有所有文件访问权限');
          }
        }, 1000); // 延迟1秒执行
        // #endif
      }
      // 初始化通知点击监听器
      // initNotificationClickListener() {
      //   console.log('初始化通知点击监听器');
      //   notificationUtil.onClickNotification((msg) => {
      //     console.log('点击通知222:', msg);
      //       if (msg.payload) {
      //           const fullContent = msg.payload.fullContent;
      //           const title = msg.title || '通知详情';
      //           // 显示完整消息
      //           uni.showModal({
      //               title: '测试模态框',
      //               content: '这是一个测试模态框，确认UI组件是否正常',
      //               showCancel: false,
      //               success: (res) => {
      //                   console.log('测试模态框显示成功');
      //               }
      //           });
      //       }
      //   });
      // }
    }
  }
</script>

<style lang="scss">
  @import "./static/scss/index.scss";
</style>